import 'dart:convert' show utf8;

extension MyStringExtension on String {
  bool hasMatch(String pattern) {
    return RegExp(pattern).hasMatch(this);
  }

  bool get isAscii {
    if (isEmpty) {
      return true;
    }

    if (utf8.encode(this).length > length) {
      return false;
    }

    return true;
  }

  bool get isSingleDigit {
    if (isEmpty) {
      return false;
    }

    switch (this) {
      case "0":
        return true;
      case "1":
        return true;
      case "2":
        return true;
      case "3":
        return true;
      case "4":
        return true;
      case "5":
        return true;
      case "6":
        return true;
      case "7":
        return true;
      case "8":
        return true;
      case "9":
        return true;
      case ".":
        return true;
      default:
        return false;
    }
  }

  bool get commonSymbols {
    if (isEmpty) {
      return false;
    }

    switch (this) {
      case "0":
        return true;
      case "1":
        return true;
      case "2":
        return true;
      case "3":
        return true;
      case "4":
        return true;
      case "5":
        return true;
      case "6":
        return true;
      case "7":
        return true;
      case "8":
        return true;
      case "9":
        return true;
      case ".":
        return true;
      default:
        return false;
    }
  }

  String isEmptyTo(String value) {
    return isEmpty ? value : this;
  }

  // /// Checks if string is URL.
  // bool get isURL {
  //   return hasMatch(
  //       r"^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\://)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&amp;%\$#\=~_\-]+))*$");
  // }
  //
  // /// Checks if string is email.
  // bool get isEmail {
  //   return hasMatch(
  //       r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$');
  // }
  //
  // /// Checks if string is phone number.
  // bool get isPhoneNumber {
  //   if (length > 16 || length < 9) return false;
  //   return hasMatch(r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$');
  // }
}
